package lib;

public class TriBulles extends Tri{
	
	public TriBulles(int nb)
	{
		super(nb);
	}
		
	public void tri()
	{
		if(this.isModDebug())
		{
			int i = 1;
			int n = this.getT().length-1;
			while(i<n){
				/************************************************************************************************
				 * 										Premi�re assertion										*
				 ************************************************************************************************/
				
				assert i<this.getT().length : "Erreur : Assertion non respect�e i<n" ;
				
				if(i>1){
					
					for(int l = i; l<this.getT().length;++l)
					{
						assert this.getElement(i-1)<=this.getElement(l) : "Erreur : Assertion non respect�e tableau non tri� jusqu'� "+l;
					}
				}
					
				for(int c = 0; c<i ;++c)
				{
				
					assert this.getElement(c)<=this.getElement(c+1) : "Erreur : Assertion non respect�e tableau non tri� jusqu'� "+c ;
					
				}
				/***********************************************************************************************/
				
				for(int j=n ; j>=i ; --j){
					if(this.getElement(j)<this.getElement(j-1)){
						this.permuter(j,j-1);
				}	
					
					/************************************************************************************************
					 * 										Deuxieme assertion										*
					 ************************************************************************************************/
					if(j<this.getT().length)
					{
						for(int l = j; l<this.getT().length;++l)
						{
							assert this.getElement(l)>=this.getElement(j-1): "Erreur : Assertion non respect�e " ;
						}
					}
					
					
					/***********************************************************************************************/
					
				}
					
				/************************************************************************************************
				 * 										Troisi�me assertion										*
				 ************************************************************************************************/
				
				for(int l = i; l<this.getT().length;++l)
				{
					assert this.getElement(l)>=this.getElement(i): "Erreur : Assertion non respect�e " ;
				}
				
				
				
				/***********************************************************************************************/
				
				++i;
				
				/************************************************************************************************
				 * 										Quatrieme assertion										*
				 ************************************************************************************************/
				

				
				for(int l = i; l<this.getT().length;++l)
				{
					assert this.getElement(i)<=this.getElement(l) : "Erreur : Assertion non respect�e tableau non tri� jusqu'� "+l;
				}
				
				for(int c = 0; c<i ;++c)
				{
				
					assert this.getElement(c)<=this.getElement(c+1) : "Erreur : Assertion non respect�e tableau non tri� jusqu'� "+c ;
					
				}
				
				/***********************************************************************************************/
			}
			
			/************************************************************************************************
			 * 										Cinquieme assertion										*
			 ************************************************************************************************/
			
			for(int l = 0; l<i-1;++l)
			{
				assert this.getElement(l)<=this.getElement(l+1) : "Erreur : Assertion non respect�e tableau non tri� jusqu'� "+l;
			}
			
			/***********************************************************************************************/
		}
		else
		{
			int i = 1;
			int n = this.getT().length-1;
			while(i<n){
				for(int j=n ; j>=i ; --j){
					if(this.getElement(j)<this.getElement(j-1)){
						this.permuter(j,j-1);
					}
				}
				++i;
			}
		}
	}	
}
